package com.itheima.reggie.common;

import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.RestControllerAdvice;

import java.sql.SQLException;
import java.sql.SQLIntegrityConstraintViolationException;

/**
 * @author ：石破天
 * @date ：Created in 2022年11月17日
 * @description ：
 *   来处理 所有程序中
 *     爆出异常的处理的
 *     对不同的异常进行统一的处理
 * @version: 1.0
 */
@RestControllerAdvice//用来标识 全局异常处理器
                     // 对程序进行增强功能的
@Slf4j
public class GlobalExceptionHandler {

    /**
     * 这里只需要写一个处理异常的处理
     *    方法的写法和处理器
     */
    @ExceptionHandler(SQLIntegrityConstraintViolationException.class)
    public R<String> exctiptionHandler(SQLIntegrityConstraintViolationException e){
         // e  就是一个违反数据库约束的异常
        // 新纪录到日志中
        log.info(e.getMessage());//查看异常信息
        if(e.getMessage().contains("Duplicate entry")){
            // 破坏唯一性的
            // "Duplicate entry 'quzai' for key 'idx_username'"
            String[] split = e.getMessage().split(" ");//字符串截取
            return R.error("数据:"+split[2]+"已经存在了");
        }else if(e.getMessage().contains("cannot be null")){
           // Column 'username' cannot be null
            String[] split = e.getMessage().split(" ");//字符串截取
            return R.error("数据:"+split[1]+"不能为空");
        }else{
            return R.error("位置问题,请您严格遵循格式来写....如果不成联系管理员");
        }

//        return R.error(e.getMessage()); 最简单方式

    }


    @ExceptionHandler(CustomException.class)
    public R<String> customExceptionHandler(CustomException e){
        // 什么时候触发这个方法 ?
        // 误删除触发 因为误删除 人为的抛出了 CustomException异常
        log.error("误删除操作,提示信息;"+e.getMessage());


        return R.error(e.getMessage());// 最简单方式
    }

}
